package vip.ola.core.entity.code;

import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;
import org.springframework.format.annotation.DateTimeFormat;

import java.io.Serializable;
import java.math.BigDecimal;
import java.time.LocalDateTime;

import static vip.ola.core.common.util.LocalDateTimeUtil.PATTERN_DATE_TIME;

/**
 * <p>
 * 码商用户表
 * </p>
 *
 * @author faker
 * @since 2020-03-28
 */
@Data
@EqualsAndHashCode(callSuper = false)
@Accessors(chain = true)
@TableName("t_code_user")
public class CodeUser implements Serializable {

    private static final long serialVersionUID = 1L;

    @TableId(value = "id", type = IdType.AUTO)
    private Long id;

    /**
     * 用户类型:1=用户,2=代理,3=码商,4=子账号
     */
    private Integer type;

    /**
     * 所属码商id
     */
    private Long codeBusId;

    /**
     * 所属代理id
     */
    private Long agentId;

    /**
     * 用户名
     */
    private String username;

    /**
     * 密码
     */
    private String password;

    /**
     * 真实姓名
     */
    private String realName;

    /**
     * 身份证号码
     */
    private String idCard;

    /**
     * 邮箱
     */
    private String email;

    /**
     * 手机号
     */
    private String mobile;

    /**
     * QQ号码
     */
    private String qq;

    /**
     * 角色
     */
    private String role;

    /**
     * 状态:-1=待审核,0=禁用,1=正常
     */
    private Integer status;

    /**
     * 保证金,单位元
     */
    private BigDecimal deposit;

    /**
     * 余额,单位元
     */
    private BigDecimal balance;

    /**
     * 冻结金额
     */
    private BigDecimal frozenAmount;

    /**
     * 可结算余额
     */
    private BigDecimal canSettAmount;

    /**
     * 已结算金额
     */
    private BigDecimal settAmount;

    /**
     * 每笔结算手续费
     */
    private BigDecimal settFee;

    /**
     * 总收益,单位元
     */
    private BigDecimal totalCollProfit;

    /**
     * 总收款金额,单位元
     */
    private BigDecimal totalCollAmount;

    /**
     * 总收款次数
     */
    private Integer totalCollNum;

    /**
     * 用户费率
     */
    private BigDecimal rate;

    /**
     * 代理费率
     */
    private BigDecimal agentRate;

    /**
     * 码商费率
     */
    private BigDecimal codeBusRate;

    /**
     * 每天允许收款次数
     */
    private Integer dayMaxNum;

    /**
     * 每天允许收款金额,单位元
     */
    private BigDecimal dayMaxAmount;

    /**
     * 登录安全类型,1-仅登录密码验证,2-登录密码+谷歌组合验证
     */
    private Integer loginSecurityType;

    /**
     * 支付安全类型,0-无需验证,1-仅支付密码验证,2-仅谷歌验证,3-支付密码+谷歌组合验证
     */
    private Integer paySecurityType;

    /**
     * 绑定谷歌验证状态,0-未绑定,1-已绑定
     */
    private Integer googleAuthStatus;

    /**
     * 谷歌验证密钥
     */
    private String googleAuthSecret;

    /**
     * 登录白名单,半角逗号分隔
     */
    private String loginWhiteIp;

    /**
     * 登录黑名单,半角逗号分隔
     */
    private String loginBlackIp;

    /**
     * 支付白名单,半角逗号分隔
     */
    private String payWhiteIp;

    /**
     * 支付黑名单,半角逗号分隔
     */
    private String payBlackIp;

    /**
     * 最后一次登录IP
     */
    private String lastLoginIp;

    /**
     * 最后一次登录时间
     */
    @JsonFormat(pattern= PATTERN_DATE_TIME)
    private LocalDateTime lastLoginTime;

    /**
     * 最后一次重置密码时间
     */
    @JsonFormat(pattern= PATTERN_DATE_TIME)
    private LocalDateTime lastPasswordResetTime;

    /**
     * 逻辑删除,0=未删除,1=已删除
     */
    private Integer deleted;

    /**
     * 创建者ID
     */
    private Long createId;

    /**
     * 创建时间
     */
    @JsonFormat(pattern= PATTERN_DATE_TIME)
    @DateTimeFormat(pattern = PATTERN_DATE_TIME)
    private LocalDateTime createTime;

    /**
     * 更新时间
     */
    @JsonFormat(pattern= PATTERN_DATE_TIME)
    @DateTimeFormat(pattern = PATTERN_DATE_TIME)
    private LocalDateTime updateTime;

    @TableField(exist = false)
    private int todayTotalNum;
    @TableField(exist = false)
    private BigDecimal todayTotalProfit;
    @TableField(exist = false)
    private int yesterdayTotalNum;
    @TableField(exist = false)
    private BigDecimal yesterdayTotalProfit;

}
